Fix the x86_64 build after the PAE check-in.
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 12 Jul 2005 07:47:21 +0000 (07:47 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Tue, 12 Jul 2005 07:47:21 +0000 (07:47 +0000)
Signed-off-by: Jun Nakajima <jun.nakajima@intel.com>
linux-2.6-xen-sparse/arch/xen/i386/mm/hypervisor.c
linux-2.6-xen-sparse/arch/xen/x86_64/mm/init.c
linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/mach-xen/mach_time.h
linux-2.6-xen-sparse/include/asm-xen/asm-x86_64/pgtable.h

index ed71010e149c8f0ae425c6997e829521d4519be7..0e19e846fde729cc675b7b9d025f4d5c286a6160 100644 (file)
@@ -343,7 +343,7 @@ unsigned long allocate_empty_lowmem_region(unsigned long pages)
         pte = pte_offset_kernel(pmd, (vstart + (i*PAGE_SIZE))); 
         pfn_array[i] = pte_mfn(*pte);
 #ifdef CONFIG_X86_64
-        xen_l1_entry_update(pte, 0);
+        xen_l1_entry_update(pte, __pte(0));
 #else
         HYPERVISOR_update_va_mapping(vstart + (i*PAGE_SIZE), __pte_ma(0), 0);
 #endif
index 0efcf264face74d02c7ee33780286e6da4d6b585..0bb164a88cd5155b8b4372aefa6c90f4a74eee1b 100644 (file)
@@ -67,7 +67,7 @@ static int init_mapping_done;
 static void __make_page_readonly(unsigned long va)
 {
         unsigned long addr;
-        pte_t *pte;
+        pte_t pte, *ptep;
        unsigned long *page = (unsigned long *) init_level4_pgt;
 
        addr = (unsigned long) page[pgd_index(va)];
@@ -79,15 +79,16 @@ static void __make_page_readonly(unsigned long va)
        addr = page[pmd_index(va)];
        addr_to_page(addr, page);
 
-       pte = (pte_t *) &page[pte_index(va)];
-       xen_l1_entry_update(pte, (*(unsigned long*)pte) & ~_PAGE_RW);
+       ptep = (pte_t *) &page[pte_index(va)];
+       pte.pte = (ptep->pte & ~_PAGE_RW);
+       xen_l1_entry_update(ptep, pte);
        __flush_tlb_one(addr);
 }
 
 static void __make_page_writable(unsigned long va)
 {
         unsigned long addr;
-        pte_t *pte;
+        pte_t pte, *ptep;
         unsigned long *page = (unsigned long *) init_level4_pgt;
 
         addr = (unsigned long) page[pgd_index(va)];
@@ -99,8 +100,9 @@ static void __make_page_writable(unsigned long va)
         addr = page[pmd_index(va)];
         addr_to_page(addr, page);
 
-        pte = (pte_t *) &page[pte_index(va)];
-        xen_l1_entry_update(pte, (*(unsigned long*)pte)| _PAGE_RW);
+        ptep = (pte_t *) &page[pte_index(va)];
+       pte.pte = (ptep->pte | _PAGE_RW);
+        xen_l1_entry_update(ptep, pte);
        __flush_tlb_one(addr);
 }
 
@@ -110,7 +112,7 @@ static void __make_page_writable(unsigned long va)
  */
 void make_page_readonly(void *va)
 {
-        pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t *pte;
+       pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t pte, *ptep;
         unsigned long addr = (unsigned long) va;
 
         if (!init_mapping_done) {
@@ -121,14 +123,15 @@ void make_page_readonly(void *va)
         pgd = pgd_offset_k(addr);
         pud = pud_offset(pgd, addr);
         pmd = pmd_offset(pud, addr);
-        pte = pte_offset_kernel(pmd, addr);
-        xen_l1_entry_update(pte, (*(unsigned long*)pte)&~_PAGE_RW);
+        ptep = pte_offset_kernel(pmd, addr);
+       pte.pte = (ptep->pte & ~_PAGE_RW);
+        xen_l1_entry_update(ptep, pte);
        __flush_tlb_one(addr);
 }
 
 void make_page_writable(void *va)
 {
-        pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t *pte;
+        pgd_t* pgd; pud_t *pud; pmd_t* pmd; pte_t pte, *ptep;
         unsigned long addr = (unsigned long) va;
 
         if (!init_mapping_done) {
@@ -139,8 +142,9 @@ void make_page_writable(void *va)
         pgd = pgd_offset_k(addr);
         pud = pud_offset(pgd, addr);
         pmd = pmd_offset(pud, addr);
-        pte = pte_offset_kernel(pmd, addr);
-        xen_l1_entry_update(pte, (*(unsigned long*)pte)|_PAGE_RW);
+        ptep = pte_offset_kernel(pmd, addr);
+       pte.pte = (ptep->pte | _PAGE_RW);
+        xen_l1_entry_update(ptep, pte);
        __flush_tlb_one(addr);
 }
 
@@ -276,7 +280,7 @@ static void set_pte_phys(unsigned long vaddr,
        if (!pte_none(*pte) &&
            pte_val(*pte) != (pte_val(new_pte) & __supported_pte_mask))
                pte_ERROR(*pte);
-        xen_l1_entry_update(pte, new_pte.pte);
+        xen_l1_entry_update(pte, new_pte);
 
        /*
         * It's enough to flush this one mapping.
@@ -331,16 +335,12 @@ static void set_pte_phys_ma(unsigned long vaddr,
        new_pte = pfn_pte_ma(phys >> PAGE_SHIFT, prot);
        pte = pte_offset_kernel(pmd, vaddr);
 
-       if (!pte_none(*pte) &&
-           pte_val_ma(*pte) != (pte_val_ma(new_pte) & __supported_pte_mask))
-               pte_ERROR(*pte);
-
         /* 
          * Note that the pte page is already RO, thus we want to use
          * xen_l1_entry_update(), not set_pte().
          */
         xen_l1_entry_update(pte, 
-                            (pfn_pte_ma(phys >> PAGE_SHIFT, prot).pte));
+                            pfn_pte_ma(phys >> PAGE_SHIFT, prot));
 
        /*
         * It's enough to flush this one mapping.
@@ -575,7 +575,7 @@ void __init extend_init_mapping(void)
                                                  __pgprot(_KERNPG_TABLE | _PAGE_USER));
 
                                pte = (pte_t *) &pte_page[pte_index(va)];
-                               xen_l1_entry_update(pte, new_pte.pte);
+                               xen_l1_entry_update(pte, new_pte);
                                extended_size += PAGE_SIZE;
                        }
                } 
index b749aa44a86f5462e5e88038edf673ecc7cedee6..4db611ecb0f1ab349194af10de43840900248fa6 100644 (file)
@@ -7,7 +7,7 @@
 #ifndef _MACH_TIME_H
 #define _MACH_TIME_H
 
-#include <linux/mc146818rtc.h>
+#include <asm-i386/mc146818rtc.h>
 
 /* for check timing call set_rtc_mmss() 500ms     */
 /* used in arch/i386/time.c::do_timer_interrupt() */
index 25a884c08a03ade1cadf340c2b8eea41c586ee54..38d3db06fb44453d22993e68339a7f8ce1a52a08 100644 (file)
@@ -91,10 +91,10 @@ extern unsigned long empty_zero_page[PAGE_SIZE/sizeof(unsigned long)];
 extern inline int pud_present(pud_t pud)       { return !pud_none(pud); }
 
 #ifdef CONFIG_SMP
-#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval).pte)
+#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval))
 
 #else
-#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval.pte))
+#define set_pte(pteptr, pteval) xen_l1_entry_update(pteptr, (pteval))
 #if 0
 static inline void set_pte(pte_t *dst, pte_t val)
 {
@@ -347,7 +347,7 @@ static inline int ptep_test_and_clear_dirty(struct vm_area_struct *vma, unsigned
        pte_t pte = *ptep;
        int ret = pte_dirty(pte);
        if (ret)
-               xen_l1_entry_update(ptep, pte_mkclean(pte).pte);
+               xen_l1_entry_update(ptep, pte_mkclean(pte));
        return ret;
 }
 
@@ -356,7 +356,7 @@ static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, unsigned
        pte_t pte = *ptep;
        int ret = pte_young(pte);
        if (ret)
-               xen_l1_entry_update(ptep, pte_mkold(pte).pte);
+               xen_l1_entry_update(ptep, pte_mkold(pte));
        return ret;
 }